import numpy as np
import wave
import os
import base64

def create_test_mp3():
    """
    创建符合官方文档要求的音频测试文件：
    - 采样率: 16kHz
    - 位深: 16bit
    - 声道: 单声道
    - 时长: 3秒
    - 格式: WAV (重命名为MP3，让后端处理转换)
    """
    
    print("开始创建测试音频文件...")
    
    # 音频参数
    sample_rate = 16000  # 16kHz采样率
    duration = 3.0       # 3秒时长
    frequency = 440      # A音频率
    
    # 生成时间轴
    t = np.linspace(0, duration, int(sample_rate * duration), False)
    
    # 生成正弦波（440Hz A音）
    sine_wave = np.sin(2 * np.pi * frequency * t)
    
    # 转换为16bit整数
    audio_data = (sine_wave * 32767).astype(np.int16)
    
    # 创建WAV文件
    wav_filename = "test_audio_temp.wav"
    with wave.open(wav_filename, 'w') as wav_file:
        wav_file.setnchannels(1)        # 单声道
        wav_file.setsampwidth(2)        # 16bit = 2字节
        wav_file.setframerate(sample_rate)  # 16kHz采样率
        wav_file.writeframes(audio_data.tobytes())
    
    # 重命名为MP3文件（让后端处理格式识别和转换）
    mp3_filename = "test_audio.mp3"
    if os.path.exists(wav_filename):
        # 读取WAV文件内容
        with open(wav_filename, 'rb') as wav_file:
            audio_content = wav_file.read()
        
        # 写入为MP3文件（实际上是WAV内容，但扩展名为MP3）
        with open(mp3_filename, 'wb') as mp3_file:
            mp3_file.write(audio_content)
        
        # 删除临时WAV文件
        os.remove(wav_filename)
        
        # 验证生成的文件
        file_size = os.path.getsize(mp3_filename)
        print(f"音频文件创建成功: {mp3_filename}")
        print(f"文件大小: {file_size} bytes")
        print(f"采样率: {sample_rate} Hz")
        print(f"声道数: 1 (单声道)")
        print(f"位深: 16 bit")
        print(f"时长: {duration} 秒")
        
        # 检查Base64编码后的大小
        with open(mp3_filename, 'rb') as f:
            audio_data = f.read()
            base64_data = base64.b64encode(audio_data)
            base64_size = len(base64_data)
            print(f"Base64编码后大小: {base64_size} bytes ({base64_size / (1024*1024):.2f} MB)")
            
            # 检查是否符合4MB限制
            if base64_size <= 4 * 1024 * 1024:
                print("✓ 符合Base64编码后不超过4MB的要求")
            else:
                print("✗ 超过Base64编码后4MB的限制")
                
        print("\n注意: 文件扩展名为.mp3，但内容为WAV格式，后端会根据扩展名进行相应处理")
        return True
    else:
        print("音频文件创建失败")
        return False

if __name__ == "__main__":
    try:
        create_test_mp3()
    except Exception as e:
        print(f"创建音频文件时出错: {e}")